import { request } from '@/utils/request/axios';
import { EntityProperty } from '#/entity';
import { AjaxResult, ErrorMessageMode, PageData, PageRequest } from '#/request';

import { EntityInfoInputDto, EntityInfoNode, EntityInfoOutputDto } from './model';

/** 管理-实体信息枚举 */
enum Api {
  /** 读取实体信息 */
  Read = '/api/admin/entityInfo/read',
  /** 读取实体节点 */
  ReadNode = '/api/admin/entityInfo/readNode',
  /** 读取实体属性信息 */
  ReadProperties = '/api/admin/entityInfo/readProperties',

  /** 更新实体信息 */
  Update = '/api/admin/entityInfo/update',
}

// #region 读取实体信息
/**
 * 读取实体信息
 * @param params 分页请求
 * @param mode 错误消息模型
 */
export function readEntityInfos(params: PageRequest, mode: ErrorMessageMode = 'message') {
  return request.post<PageData<EntityInfoOutputDto>>(
    {
      url: Api.Read,
      params: params,
    },
    {
      errorMessageMode: mode,
    },
  );
}
// #endregion
// #region 读取实体节点
/**
 * 读取实体节点
 * @param mode 错误消息模型
 */
export function readEntityInfoNodes(mode: ErrorMessageMode = 'message') {
  return request.get<EntityInfoNode[]>(
    {
      url: Api.ReadNode,
    },
    {
      errorMessageMode: mode,
    },
  );
}
// #endregion
// #region 读取实体属性信息
/**
 * 读取实体属性信息
 * @param typeName 实体类型
 * @param mode 错误消息模型
 */
export function readEntityInfoProperties(typeName: string, mode: ErrorMessageMode = 'message') {
  return request.get<AjaxResult<EntityProperty[]>>(
    {
      url: Api.ReadProperties,
      params: { typeName },
    },
    {
      errorMessageMode: mode,
    },
  );
}
// #endregion

// #region 更新实体信息
/**
 * 更新实体信息
 * @param dtos 实体信息
 * @param mode 错误消息模型
 */
export function updateEntityInfos(dtos: EntityInfoInputDto[], mode: ErrorMessageMode = 'message') {
  return request.post(
    {
      url: Api.Update,
      params: dtos,
    },
    {
      errorMessageMode: mode,
    },
  );
}
// #endregion
